home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / 3dlib15.zip / DEMO3DW.PAS < prev    next >
Pascal/Delphi Source File  |  1992-10-27  |  10KB  |  309 lines

  1. (******************************************************************************
  2. *                                   demo3dW                                   *
  3. ******************************************************************************)
  4. program demo3dW;
  5.  
  6. {$R 3dLIB.RES}
  7.  
  8.  
  9.  
  10. uses
  11.     wObjects
  12.     ,winProcs
  13.     ,winTypes
  14.     ,rtObjW
  15.     ,projectW
  16.     ,hdr3dW
  17.     ,ctm3dW
  18.     ;
  19. const
  20.    id_icon = '3DICO';
  21.    id_cursor = '3DCUR';
  22.    id_menu = '3DMEN';
  23.  
  24.    cm_about = 101;
  25.    cm_reDraw = 102;
  26.    cm_quit = 103;
  27. type
  28.     Pr2d2Application = ^ r2d2Application;
  29.     r2d2Application = object(TApplication)
  30.  
  31.         procedure initMainWindow; virtual;
  32.  
  33.     end; {r2d2Application object definition}
  34.  
  35.     Pr2d2Window = ^ r2d2Window;
  36.     r2d2Window = object(TWindow)
  37.  
  38.  
  39.       constructor init(AParent : PWindowsObject; ATitle : PChar);
  40.         procedure paint(paintDC : HDC; var paintInfo : TPaintStruct); virtual;
  41.       procedure setupWindow; virtual;
  42.       procedure WMDestroy(var msg : TMessage); virtual wm_first + wm_destroy;
  43.       procedure wmTimer(var msg : TMessage); virtual wm_first + wm_timer;
  44.         procedure error(i : byte; j : word);
  45.        procedure getWindowClass(var AWndClass : TWndClass); virtual;
  46.        procedure cmQuit(var Msg : TMessage); virtual cm_first + cm_quit;
  47.        procedure cmReDraw(var Msg : TMessage); virtual cm_first + cm_reDraw;
  48.        procedure cmAbout(var Msg : TMessage); virtual cm_first + cm_about;
  49.  
  50.     end; {r2d2Window object definition}
  51.  
  52. const
  53.    timer_id = 1;
  54.  
  55. constructor r2d2Window.init;
  56. begin
  57.      TWindow.init(AParent, ATitle);
  58.      with attr do begin
  59.           x := 20;
  60.           y := 30;
  61.           w := 150;
  62.           h := 150;
  63.      end;
  64.      attr.menu := loadMenu(HInstance, id_menu);
  65. end; { r2d2Window.init }
  66.  
  67. (*******************************************************************)
  68. (* Application initMainWindow Procedure                            *)
  69. (*******************************************************************)
  70. procedure r2d2Application.initMainWindow;
  71. begin
  72.     mainWindow := new(Pr2d2Window, init(nil, '3dLib/W - DEMO3dW'));
  73.    randomize;
  74. end; {r2d2Application.initMainWindow}
  75.  
  76. procedure r2d2Window.error;
  77. begin
  78.     messageBox(hWindow, 'Error occured during object load', 'Alert', mb_iconExclamation or mb_ok);
  79.     closeWindow;
  80. end; { Window error procedure }
  81.  
  82. (*******************************************************************)
  83. (* Global Variables and Constants                                  *)
  84. (*******************************************************************)
  85. var
  86.     i,
  87.     element    : integer;
  88.     ee    : word;
  89.     obj    : array [ 1 .. 9 ] of baseObjectPtr;
  90.     ch    : char;
  91.     V0
  92.     ,V1
  93.     ,V2
  94.     ,V3
  95.     ,V4
  96.     ,V5
  97.     ,V6
  98.     ,V7
  99.     ,V8
  100.     ,V9    : real;
  101.     I0
  102.     ,I1
  103.     ,I2
  104.     ,I3
  105.     ,I4
  106.     ,I5
  107.     ,I6
  108.     ,I7
  109.     ,I8
  110.     ,I9    : integer;
  111.     mover, mover2 : byte;
  112. const
  113.     zeroPoint    : point3d = (x:0.0; y:0.0; z:0.0);
  114.    backwards   : boolean = false;
  115.  
  116.  
  117. (*******************************************************************)
  118. (* power                                                           *)
  119. (*******************************************************************)
  120. function power(a, b : real) : real;
  121. begin
  122.     power := exp(b * ln(a));
  123. end; {power}
  124.  
  125. (*******************************************************************)
  126. (* Window Paint Procedure                                          *)
  127. (*******************************************************************)
  128. procedure r2d2Window.Paint;
  129. var
  130.     myPen, oldPen : HPen;
  131.     color1, color2, color3, color4 : TColorRef;
  132. begin
  133.    color1 := rgb(random(255), random(255), random(255));
  134.    color2 := rgb(random(255), random(255), random(255));
  135.    color3 := rgb(random(255), random(255), random(255));
  136.    color4 := rgb(random(255), random(255), random(255));
  137.    if (backwards) then begin
  138.       mover := random(20) + 1;
  139.       mover2 := random(20) + 1;
  140.    end;
  141.    if (isZoomed(hWindow)) then begin
  142.     maxX := getSystemMetrics(sm_cxFullScreen);
  143.     maxY := getSystemMetrics(sm_cyFullScreen);
  144.    end else begin
  145.     maxX := attr.w;
  146.     maxY := attr.h;
  147.    end; { not zoomed }
  148.     myPen := getStockObject(white_pen);
  149.     oldPen := selectObject(paintDC, myPen);
  150.    if (not backwards) then begin
  151.        for i0 := 1 to trunc( 60) do begin
  152.           selectObject(paintDC, oldPen);
  153.            deleteObject(myPen);
  154.            myPen := createPen(ps_solid, 1, color1);
  155.            selectObject(paintDC, myPen);
  156.            obj[1]^.paint(paintDC);
  157.            obj[1]^.rotate(z, trunc( 6));
  158.            obj[1]^.move(x,  mover);
  159.           selectObject(paintDC, oldPen);
  160.            deleteObject(myPen);
  161.            myPen := createPen(ps_solid, 1, color2);
  162.            selectObject(paintDC, myPen);
  163.            obj[2]^.paint(paintDC);
  164.            obj[2]^.rotate(z, trunc( -6));
  165.            obj[2]^.move(x,  -mover);
  166.           selectObject(paintDC, oldPen);
  167.            deleteObject(myPen);
  168.            myPen := createPen(ps_solid, 1, color3);
  169.            selectObject(paintDC, myPen);
  170.            obj[3]^.paint(paintDC);
  171.            obj[3]^.rotate(z, trunc( 6));
  172.            obj[3]^.move(y,  mover2);
  173.           selectObject(paintDC, oldPen);
  174.            deleteObject(myPen);
  175.            myPen := createPen(ps_solid, 1, color4);
  176.            selectObject(paintDC, myPen);
  177.            obj[4]^.paint(paintDC);
  178.            obj[4]^.rotate(z, trunc( -6));
  179.            obj[4]^.move(y,  -mover2);
  180.        end; { loop } 
  181.    end else begin
  182.        for i0 := 1 to trunc( 60) do begin
  183.           selectObject(paintDC, oldPen);
  184.            deleteObject(myPen);
  185.            myPen := createPen(ps_solid, 1, color4);
  186.            selectObject(paintDC, myPen);
  187.            obj[1]^.paint(paintDC);
  188.            obj[1]^.rotate(z, trunc( -6));
  189.            obj[1]^.move(x,  -mover);
  190.           selectObject(paintDC, oldPen);
  191.            deleteObject(myPen);
  192.            myPen := createPen(ps_solid, 1, color3);
  193.            selectObject(paintDC, myPen);
  194.            obj[2]^.paint(paintDC);
  195.            obj[2]^.rotate(z, trunc( 6));
  196.            obj[2]^.move(x,  mover);
  197.           selectObject(paintDC, oldPen);
  198.            deleteObject(myPen);
  199.            myPen := createPen(ps_solid, 1, color2);
  200.            selectObject(paintDC, myPen);
  201.            obj[3]^.paint(paintDC);
  202.            obj[3]^.rotate(z, trunc( -6));
  203.            obj[3]^.move(y,  -mover2);
  204.           selectObject(paintDC, oldPen);
  205.            deleteObject(myPen);
  206.            myPen := createPen(ps_solid, 1, color1);
  207.            selectObject(paintDC, myPen);
  208.            obj[4]^.paint(paintDC);
  209.            obj[4]^.rotate(z, trunc( 6));
  210.            obj[4]^.move(y,  mover2);
  211.        end; { loop }
  212.    end;
  213.    backwards := not backwards;
  214.     selectObject(paintDC, oldPen);
  215.     deleteObject(myPen);
  216. end; { Window Paint Procedure }
  217.  
  218. (******************************************************************************
  219. *                           r2d2Window.setupWindow                            *
  220. ******************************************************************************)
  221. procedure r2d2Window.setupWindow;
  222. begin
  223.    TWindow.setupWindow;
  224.    setTimer(hWindow, timer_id, 10000, nil);
  225.     obj[1] := new(obj3dPtr, open('box.3D2', zeroPoint, maxColor));
  226.     ee := obj[1]^.load;
  227.     if (ee <> 0) then
  228.         error(1, ee);
  229.     obj[1]^.goto3DPos(trunc( 0), trunc( 0), trunc( 0));
  230.     obj[2] := new(obj3dPtr, open('box.3D2', zeroPoint, maxColor));
  231.     ee := obj[2]^.load;
  232.     if (ee <> 0) then
  233.         error(1, ee);
  234.     obj[2]^.goto3DPos(trunc( 0), trunc( 0), trunc( 0));
  235.     obj[3] := new(obj3dPtr, open('pyr.3D2', zeroPoint, maxColor));
  236.     ee := obj[3]^.load;
  237.     if (ee <> 0) then
  238.         error(1, ee);
  239.     obj[3]^.goto3DPos(trunc( 0), trunc( 0), trunc( 0));
  240.     obj[4] := new(obj3dPtr, open('pyr.3D2', zeroPoint, maxColor));
  241.     ee := obj[4]^.load;
  242.     if (ee <> 0) then
  243.         error(1, ee);
  244.     obj[4]^.goto3DPos(trunc( 0), trunc( 0), trunc( 0));
  245. end; {r2d2Window.setupWindow}
  246.  
  247. (******************************************************************************
  248. *                            r2d2Window.WMDestroy                             *
  249. ******************************************************************************)
  250. procedure r2d2Window.WMDestroy;
  251. begin
  252.    killTimer(hWindow, timer_id);
  253.    TWindow.WMDestroy(Msg);
  254. end; {r2d2Window.WMDestroy}
  255.  
  256. (******************************************************************************
  257. *                             r2d2Window.WMTimer                              *
  258. ******************************************************************************)
  259. procedure r2d2Window.WMTimer;
  260. begin
  261.    invalidateRect(hWindow, nil, true);
  262. end; {r2d2Window.WMTimer}
  263.  
  264. (******************************************************************************
  265. *                          r2d2Window.getWindowClass                          *
  266. ******************************************************************************)
  267. procedure r2d2Window.getWindowClass;
  268. begin
  269.      TWindow.getWindowClass(AWndClass);
  270.      AWndClass.HIcon := loadIcon(HInstance, id_icon);
  271.      aWndClass.HCursor := loadCursor(HInstance, id_cursor);
  272. end; {r2d2Window.getWindowClass}
  273.  
  274. (******************************************************************************
  275. *                              r2d2Window.cmQuit                              *
  276. ******************************************************************************)
  277. procedure r2d2Window.cmQuit;
  278. begin
  279.     closeWindow;
  280. end; {r2d2Window.cmQuit}
  281.  
  282. (******************************************************************************
  283. *                             r2d2Window.cmReDraw                             *
  284. ******************************************************************************)
  285. procedure r2d2Window.cmReDraw;
  286. begin
  287.     invalidateRect(HWindow, nil, true);
  288. end;
  289.  
  290. (******************************************************************************
  291. *                             r2d2Window.cmAbout                              *
  292. ******************************************************************************)
  293. procedure r2d2Window.cmAbout;
  294. var
  295.     dialog : TDialog;
  296. begin
  297.     dialog.init(@self, '3DABO');
  298.     dialog.execute;
  299.     dialog.done;
  300. end; {r2d2Window.cmAbout}
  301.  
  302. var
  303.     r2d2App : r2d2Application;
  304. begin
  305.     r2d2App.init('r2d2App');
  306.     r2d2App.run;
  307.     r2d2App.done;
  308. end.
  309.